查看原文
其他

分布式存储 Ceph 运维 10 个疑难问题解读 | 运维进阶

twt社区 twt企业IT社区 2022-07-03

从Ceph提供的存储服务上看,其所包含的设备、使用场景是比较复杂的,有很多社区会员反映,在平时的使用中经常会遇到一些难题无法及时解决。因此,社区特别组织了相关答疑活动为大家提供参考,以下是一些比较典型的问题整理,更多内容欢迎点击阅读原文浏览。


1、如何将块设备映像挂载到客户机?

用三台虚拟机手动部署了ceph集群,在集群上创建了一个test存储池和一个叫testimage的1000M大小的块设备映像,请问如何将块设备映像挂载到一个外部的客户机的/home/test目录下?

@zhuqibs Mcd 软件开发工程师:

rbd create test --size 1024 --pool test --p_w_picpath-format 2

rbd info test --pool test

rbd map test --pool test

rbd showmapped

mkfs.ext4 /dev/rbd0

mount /dev/rbd0 /mnt

@youki2008 广东溢达 系统架构师:

首先在ceph1管理节点上创建ceph块客户端用户名和认证密钥。

其次安装ceph客户端。

最后块设备的创建及映射。

ceph集群中默认创建的块设备会在rbd池中创建,但是使用deploy的安装方式部署的集群,rbd池默认不创建。

@山鸡 某保险:

客户端需要装ceph-common客户端吧, 而且客户端需要访问该存储池的秘钥, 当然,如果只是为了做实验的话,可直接用admin 。

只要能保证客户端能访问ceph集群,其余的就是块存储挂载的正常命令, 网上很多挂载的,参考下。


2、Ceph集群出现了故障,如何知道影响到了哪些文件?哪些文件还可用?

Ceph向外提供的是文件系统,客户端mount到本地使用。如果集群健康状态不正常(比如某些对象丢失),如何知道哪些文件可用?

@youki2008 广东溢达 系统架构师:

那就要看是逻辑层上的故障还是物理层的故障了,逻辑层面的话可以通过副本进行修复,物理层面的话就比较麻烦了。

@zhuqibs Mcd 软件开发工程师:

Ceph集群出现什么故障, 如果只是逻辑上问题,修复后,所有文档都不会损失;如果是物理层的故障,ceph有副本,只要不超过一定限度,仍然不会影响到数据和文件;如果损失的,这个是物理层的,基本上追不回来了,除非用底层的修复技术。


3、cinder与ceph osd的连接问题?

cinder的volume进程是否对每一个ceph osd都建立了一个TCP连接?cinder默认的文件描述符数是1024,那有很多osd的时候,是否要把这个参数调高?

@zhuqibs Mcd 软件开发工程师:

(1) ceph的少量的monitor组成的小规模集群,负责管理的Map。Cluster Map是整个RADOS系统的关键数据结构,包含集群中全部成员、关系、属性等信息以及管理数据的分发。ceph.conf文件中主要就是指定mon的节点的位置,所以cinder服务需要和ceph的monitor保持连接,但不一定是tcp啊,内部的应该是rpc连接。

(2)cinder的文件描述符是个逻辑概念,和后端的osd,没有必然联系,应该不需要调高。

@youki2008 广东溢达 系统架构师:

有很多osd的时候,有必要将默认的文件描述符数量调大,不然后边数量多起来超过1024的话会有报错。


4、Ceph的块设备存储有良好的读写性能,可以组成共享文件系统,但同时Ceph自身也有文件系统接口,请问两者有何区别?性能上孰高孰低?

@zhuqibs Mcd 软件开发工程师:

块存储读写快,不利于共享,文件存储读写慢,利于共享。能否弄一个读写快,利 于共享的出来呢。于是就有了对象存储。

所以,Ceph的块存储是可以组成文件系统的,提供共享服务的,但没有这个必要,因为服务器、网络以及NFS服务,你都要自行安排。除非一种情况,你对文件系统共享的速度,乃至对象存储的速度均不满意,但又想要共享功能时,你再可以考虑块设备存储组成共享文件系统的方案。

@youki2008 广东溢达 系统架构师:

特点是块存储读写快,但不利于共享,而文件存储读写慢,但有利于共享。在性能上,块存储的性能高于文件存储。

@荣重实 XSKY 技术总监:

CephFS最大的问题是社区并不推荐上生产,请自行评估数据安全性。


5、传统存储如何一键切换到分布式存储Ceph?

我们行现在用的存储是华为5800,架构是同城双活,假如采用分布式存储,如何升级迁移?

@zhuqibs Mcd 软件开发工程师:

(1)存储的形式基本上对用户的透明的,用户感知不到数据是在传统存储上,还是在分布式存储上;

(2)每个厂商对自己名下的数据迁移都有特定的解决方案。我感受最深的是emc的scaleio,确实好用,性能又好,原来有试用版的,现在不知道有没有。

@荣重实 XSKY  技术总监:

存储的切换,涉及应用和数据两个平面的工作。

首先数据层面,如何做好数据迁移是做一键切换的基础,那么至少要有数据在线迁移的方案或者工具来做支撑;其次在数据迁移之后,应用怎么平滑切换应用,也是要提前考虑的问题;所以并不是简单的存储替换问题,需要综合评估,各个平面的适应性,兼容性,可能发生的影响,以及回退方案。对于存储来说,如果有类似存储虚拟化或者存储纳管的功能,可能会让这个过程风险降低,趋于平滑。

@lhs0981101410 中银保信 系统运维工程师:

添加分布式存储的映射关系,然后做数据的迁移。


6、ceph对象存储osd分配不均匀,osd full?

200TB的集群,导入100来个T的数据就有osd full(95%)是什么情况?看osd状况,最大92%,最少58%,大部分在60-70%左右。CRUSH算法下为什么会分布不均呢?

@zhuqibs Mcd 软件开发工程师:

crush算法不是万能的啊!

(1)哈希计算分配数据地址,存在一定的随机性,随着系统的使用,各个存储节点的容量使用很不均衡,在一些不利配置的条件下,最大和最小容量之间最高相差50%,即使对数据进行复杂的重新分布均衡优化,也仅能达到90%左右的容量使用率。造成容量的浪费;

(2)crush算法中,有两次映射,对象到PG的映射是通过哈希值取模,对象名是不可控的,因此只有在数据量大的情况,可以达到一个大致的均衡分布。再就是第二次映射,ceph会生成一系列的pg数目,包含了一些osd列表,它是一种伪随机算法,pg的数目也会影响数据均衡的效果,也会产生一些不稳定因素。


7、如何恢复Ceph的故障节点的硬盘上的数据?

假设集群的故障域为host,那么如果两个节点同时down掉,而且无法启动这两个节点,但是节点的硬盘数据可以正常读取。那么我该如何将这两个节点的数据导入到集群?导入会不会覆盖在节点down掉后写入到集群的对象呢?

@zhuqibs Mcd 软件开发工程师:

(1)如果真的是故障,故障磁盘重新加入集群,必先初始化,恢复不了;

(2)如果不是故障,restart,可以重启磁盘读取数据;

(3)故障磁盘没有必要去恢复,ceph都是有副本的。

@youki2008 广东溢达 系统架构师:

Ceph都是有副本数据的,如果是很严重的故障, 故障磁盘只能重新加入集群,必先初始化,恢复不了了。


8、目前企业Ceph 应用版本该如何抉择;采用ssd+sata 应用bulestore引擎?

1:目前企业应用ceph 的主流版本是哪个版本,目前ceph已经到o版了 ,那我现在部署的话建议部署哪个版本了?

2:采用ssd+sata 应用bulestore引擎 ,其中block.db 和block.wal 的大小该如何设置, 看过一些资料,建议block.db 是主设备 4%,那block.wal的大小建议如何设置了?是与block.db的大小一样吗?

@zhuqibs Mcd 软件开发工程师:

(1)一般LTS版本是当前年份往过去退2年左右,所以,现在的稳定版是M版mimic。

(2)wal 是 RocksDB 的write-ahead log, 相当于之前的 journal 数据,db 是 RocksDB 的metadata 信息。在磁盘选择原则是 block.wal > block.db > block。当然所有的数据也可以放到同一块盘上。

(3)默认情况下, wal 和 db 的大小分别是 512 MB 和 1GB, 官方建议调整block.db 是主设备 4% ,而block.wal分为6%左右,2个加起来10%左右。

@花花世界  系统架构师:

1、生产环境L版比较多。

2、一般 wal 分区大于 10G 就足够使用, Ceph 官方文档建议每个 db 分区不小于每个数据盘容量的 4%,比如:数据盘4T,db分区 180G,wal分区 60G。具体可根据SSD或者NVME盘容量灵活设置。


9、Ceph成熟的升级方案 j 版到 L?

目前公司项目中使用了J版本的ceph,在页面管理不能实现,只能升级后才能使用mgr,目前遇到问题是:

1 、ceph即是数据节点又是openstack计算节点

2 、业务中使用的数据大概20t

3 、共计节点数70个

有没有类似的升级方式可以参考?

@zhuqibs Mcd 软件开发工程师:

作为生产系统,有一个dashboard是很有必要的。

(1)建议滚动升级到L版

(2)寻求是否有其他第三方的dashboard可供J版使用;

(3)根据ceph api接口,自己开发一个dashboard

@花花世界  系统架构师:

1、为了一个所谓的dashboard去升级ceph,是不是有点得不偿失?

2、长远看自己写一个管理平台,可以兼容各种ceph版本收益更高,非得赖着官方的dashboard可能会导致管理模块和ceph版本紧耦合,不得不跟着官方天天升级,这就是从此折腾不断了。

3、官方的dashboard 重构了不知道多少次了, 最早的calamari时代 到现在的版本,来来回回的变,你要是贴着他们的版本,官方一旦弃坑就歇菜,这些都是老司机们之前吃过的亏。


10、使用ceph-ansible安装好一个ceph集群,怎么才能在安装完更改集群name呢?

@youki2008 广东溢达 系统架构师:

可以采用命令:ceph-deploy --cluster mydom new ceph-node

@zhuqibs Mcd 软件开发工程师:

文档中写了设置名字的命令

ceph-deploy --cluster mydom new ceph-node

但是同时,又写了没有必要去设置集群名字。

应该是原先是有这功能的,但后来被开发小组移除了,以下是移除该功能的公告,供参考:

http://lists.ceph.com/pipermail/ceph-users-ceph.com/2017-June/018497.html

@宁泽阳 中信银行信用卡中心 系统工程师:

建议在部署过程中修改配置文件进行集群name修改,部署完成后集群name配置较为分散,容易修改不完全,可能会导致集群访问异常。

本文来自社区会员交流,点击阅读原文,可以看更多相关分享觉得本文有用,请转发或点击“在看”,让更多同行看到


 资料/文章推荐:


欢迎关注社区 "分布式存储" 技术主题 ,将会不断更新优质资料、文章,您也可以前往提出疑难问题,与同行切磋交流。地址:http://www.talkwithtrend.com/Topic/23951


下载 twt 社区客户端 APP


长按识别二维码即可下载

或到应用商店搜索“twt”


长按二维码关注公众号

*本公众号所发布内容仅代表作者观点,不代表社区立场

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存